保护措施
1 | Arch: amd64-64-little |
这样看来还是写mallo hook,free hook(结果有限制写不了的)
程序就4个功能,先看简单的两个
dump只是简单的输出,没有检测,输出为00截断,可以信息泄露
1 | int __fastcall dump(__int64 a1) |
del函数就是free,没有任何限制,只要绕过系统的检测就可以free
1 | int __fastcall del(void *a1) |
alloc
我们输入data的时候可以二次输入,那么就可以堆溢出了,最后的那里相当于给了提示,不过暂时看来只能溢出top chunk
1 | __int64 __fastcall alloc(__int64 a1) |
最后说一个可以覆盖data指针的功能,就是give up
1 | if ( v3 != 4 ) |
那有了这个我们就可以任意读和任意free了
先泄露libc地址
1 | # info leak ———— leak read |
在泄露栈地址
1 | # info leak ———— leak stack |
那么再泄露canary的值
1 | canary_addr = buf_addr + 0x28 + 1 |
使用house of spirit技术,让buf+0x10的地址写到fastbin头指针
1 | # house of spirit |
覆盖返回地址并返回
1 | # overwrite return address |
完整exp
1 | #!/usr/bin/env python |